
#ifndef __BASE_NODE_HPP__
#define __BASE_NODE_HPP__
#include "subject.hpp"
#include <vector>
#include <string>
#include <array>
#include "macro.hpp"

namespace footman {
    using ObjectID = std::size_t;
    class Object {
    protected:
        mb _valid = 1u;
    public:
        Object() {}
        virtual ~Object() {}

        virtual void destroy() {
            _valid = 0u;
        }

        inline mb isValid() const {
            return _valid;
        }

        static mb IsValid( Object const* bn = nullptr ) {
            return bn && bn->_valid;
        }
    };

}
#endif __BASE_NODE_HPP__